package com.dubbo.provider;

import cn.hutool.core.convert.Convert;
import cn.hutool.setting.dialect.Props;
import com.dubbo.framework.URL;
import com.dubbo.framework.config.ServerConfig;
import com.dubbo.framework.protocol.Protocol;
import com.dubbo.framework.protocol.ProtocolFactory;
import com.dubbo.framework.protocol.http.HttpServer;
import com.dubbo.framework.register.LocalRegister;
import com.dubbo.framework.register.Register;
import com.dubbo.framework.register.RemoteMapRegister;
import com.dubbo.framework.util.URLUtil;
import com.dubbo.provider.api.HelloService;
import com.dubbo.provider.impl.HelloServiceImpl;
import lombok.extern.slf4j.Slf4j;

/**
 * 生产者
 *
 * @author by Mr. Li 2021/4/28 17:53
 */
@Slf4j
public class Provider {
    public static void main(String[] args) {

        // 服务启动之前暴露服务
//        Register localRegister = new LocalRegister();
//        localRegister.register(HelloService.class.getName(), HelloServiceImpl.class);
        // 将服务暴露到注册中心 zk中
        RemoteMapRegister remoteMapRegister = new RemoteMapRegister();
        remoteMapRegister.register(HelloService.class.getName(), HelloServiceImpl.class);

        // 启动Tomcat/netty
        HttpServer httpServer = new HttpServer();
//         将配置信息推送到zk 注册中心 实现集群化
        final Props props = new Props("application.properties");
        final URL url = new URL(Convert.toStr(props.get("ip.addr")), Convert.toInt(props.get("ip.port")));
//        ServerConfig.up(url);
        httpServer.start(url.getIpAddr(), url.getPort());

        // 重构 使用多协议版本
        //Protocol protocol = new HttpProtocol();

        // 重构 使用工厂类 解耦
//        final Protocol protocol = ProtocolFactory.getProtocol();
//
//        // 重构到 配置中心去
//        //httpServer.start();
//
//        protocol.start(URLUtil.getUrl());

        log.info("服务提供者启动成功。。。。。");
    }
}
